/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.jomijushi.fid.dao;

import com.jomijushi.fid.dominio.FidProveedor;
import java.util.List;
import javax.persistence.Query;



/**
 *
 * @author Jorge Valverde Rebaza
 */
public class ProveedorImplementsDAO extends JpaDao<Integer, FidProveedor> implements ProveedorInterfazDAO{

    /**
     * Reporta una lista de proveedores que cumplem cierto criterio 
     * y ordenados por cierto criterio haciendo uso de paginacion
     * @param criterio nombre de la columna de FidProveedor con la que se buscara
     * @param keyword criterio de busqueda a usar
     * @param ordenarBy nombre de la columna de FidProveedor tomado como criterio de ordenacion
     * @param criterioOrden criterio de orden, ascendente o descendente
     * @param todo criterio de reporte total o parcial, true = total, false = parcial
     * @param limInf si el reporte es parcial, indica el limite inferior del reporte de paginacion
     * @param limSup si el reporte es parcial, indica el limite superior del reporte de paginacion
     * @return Lista de proveedores que cumplan con los criterios
     */
    public List<FidProveedor> listarProveedores(String criterio, String keyword, String ordenarBy, String criterioOrden, boolean todo, int limInf, int limSup) {
        if(criterioOrden.compareTo("")==0 || criterioOrden.compareToIgnoreCase("asc")!=0 || criterioOrden.compareToIgnoreCase("desc")!=0)
            criterioOrden = "asc";
        if(ordenarBy.compareTo("")==0)
            ordenarBy = "nombres";

        
        String jpql="";
        Query query;      
        if(keyword.length()>0 && criterio.length()>0){
            jpql = "select p from FidProveedor p where p."+criterio+" LIKE :keyword order by p."+ordenarBy+" "+criterioOrden;
            query = entityManager.createQuery(jpql).setParameter("keyword", "%"+keyword+"%");            
        }
        else{
              jpql = "select p from FidProveedor p order by p."+ordenarBy+" "+criterioOrden;
              query = entityManager.createQuery(jpql);           
        }
         if (!todo)
        {// esto nos permitira hacer una paginación
            query.setMaxResults(limSup);
            query.setFirstResult(limInf);
        }       
        return query.getResultList();
    }

    
    
    // Esta funcion estoy usando
    public List<FidProveedor> listarProveedores(String valorKey,String buscar, boolean todo, int tope, int desde, String orden)
    {
        String jpql="";
        String ordenar ="";
        if(orden.length()>0)
            ordenar="ORDER BY i."+orden;

        if(buscar.length()>0)
            jpql="SELECT i FROM FidProveedor i WHERE i."+valorKey+" LIKE :keyword "+ordenar;
        else
            jpql="SELECT i FROM FidProveedor i "+ordenar;

        Query q = entityManager.createQuery(jpql);
        if(buscar.length()>0)
            q.setParameter("keyword","%"+buscar+"%");
        if (!todo)
        {// esto nos permitira hacer una paginación
            q.setMaxResults(tope);
            q.setFirstResult(desde);
        }
        return q.getResultList();
    }

}
